package com.jiang.daily.Q3138;

import java.util.Arrays;

/**
 * @author Jiang
 * @version 1.0
 * @date 2024/12/20 20:55
 */
class Solution {
    public int minAnagramLength(String s) {
        int len = s.length();
        // i 表示字符串由几个小字符串连接而成
        for (int i = len; i >= 2; i--) {
            // 如果不能按i个小字符串平均分配字母，则continue
            if (len % i != 0)
                continue;
            // 每一个小字符串的长度
            int pieceLen = len / i;
            // 验证是否满足题目条件
            if (check(s, pieceLen))
                return pieceLen;
        }
        return len;
    }

    private boolean check(String s, int pieceLen) {
        int[] arr1 = new int[26];
        int[] arr2 = new int[26];
        // 遍历第一个小字符串，记录字母出现的次数到arr1
        for (int j = 0; j < pieceLen; j++) {
            arr1[s.charAt(j) - 'a']++;
        }
        // 遍历后面每一个小字符串，记录字母出现的次数到arr2
        for (int j = pieceLen; j < s.length(); j += pieceLen) {
            Arrays.fill(arr2, 0);
            for (int k = j; k < j + pieceLen; k++) {
                arr2[s.charAt(k) - 'a']++;
            }
            // 如果arr1 不等于 arr2 说明当前小字符串与第一个小字符串不是同位字符串，返回false
            if (!Arrays.equals(arr1, arr2))
                return false;
        }
        return true;
    }
}
